package com.esionwong.basic.service;

import com.esionwong.basic.entity.SysRolePermission;
import com.esionwong.basic.framework.common.service.BaseService;
import org.apache.commons.collections4.SetUtils;

import java.util.List;
import java.util.Set;

/**
 * 角色权限关系 服务类
 *
 * @author esionwong
 */
public interface SysRolePermissionService extends BaseService<SysRolePermission> {

    /**
     * 保存
     *
     * @param roleId 角色ID
     * @param permissionIds 权限id
     * @return boolean
     * @throws Exception
     */
    boolean saveSysRolePermission(Long roleId, List<Long> permissionIds) throws Exception;

    /**
     * 根据角色id获取权限id列表
     *
     * @param roleId 角色ID
     * @return 权限id列表
     * @throws Exception
     */
    List<Long> getPermissionIdsByRoleId(Long roleId) throws Exception;

    /**
     * 根据角色id获取该对应的所有三级权限ID
     *
     * @param roleId 角色ID
     * @return 所有三级权限ID
     * @throws Exception
     */
    List<Long> getThreeLevelPermissionIdsByRoleId(Long roleId) throws Exception;

    /**
     * 批量保存角色权限关系
     *
     * @param roleId 角色ID
     * @param addSet 角色权限关系集合
     * @return boolean
     * @throws Exception
     */
    boolean saveSysRolePermissionBatch(Long roleId, SetUtils.SetView addSet) throws Exception;

    /**
     * 根据角色id删除关联的权限关系
     *
     * @param roleId 角色ID
     * @return boolean
     * @throws Exception
     */
    boolean deleteSysRolePermissionByRoleId(Long roleId) throws Exception;

    /**
     * 根据角色id获取可用的权限编码
     *
     * @param roleId 角色ID
     * @return 权限编码
     * @throws Exception
     */
    Set<String> getPermissionCodesByRoleId(Long roleId) throws Exception;

    /**
     * 通过权限id判断在角色权限表中是否有数据存在
     *
     * @param permissionId 权限ID
     * @return boolean
     * @throws Exception
     */
    boolean isExistsByPermissionId(Long permissionId) throws Exception;

    /**
     * 角色下是否有权限
     *
     * @param roleId 角色ID
     * @return boolean
     * @throws Exception
     */
    boolean hasPermission(Long roleId) throws Exception;
}
